package org.aynu.parkingservice.service;

import org.aynu.parkingservice.common.ParkingResponse;
import org.aynu.parkingservice.entity.ParkingEntity;
import org.aynu.parkingservice.entity.ReserEntity;

import java.util.List;


/**
 * 停车服务
 *
 * @author 小粥
 * @since 2025/03/03
 */

public interface ParkingService {

        /**
         * 创建 Parking
         *
         * @param parkingEntity 停车实体
         * @return {@link ParkingResponse }<{@link Integer }>
         * @author 小粥
         * @since 2025/03/03
         *//*创建车位*/
        ParkingResponse<Integer> createParking(ParkingEntity parkingEntity);

        /**
         * 选择 Parking by ID （按 ID 停车）
         *
         * @param spotId Spot ID （点 ID）
         * @return {@link ParkingResponse }<{@link ParkingEntity }>
         * @author 小粥
         * @since 2025/03/03
         *//*通过Id查询车位信息*/
        ParkingResponse<ParkingEntity> selectParkingById(int spotId);

        /**
         * 选择停车位
         *
         * @return {@link ParkingResponse }<{@link List }<{@link ParkingEntity }>>
         * @author 小粥
         * @since 2025/03/03
         *//*查询所有车位*/
        ParkingResponse<List<ParkingEntity>> selectParking();

        /**
         * 选择按状态停车
         *
         * @return {@link ParkingResponse }<{@link List }<{@link ParkingEntity }>>
         * @author 小粥
         * @since 2025/03/03
         *//*查询可用车位*/
        ParkingResponse<List<ParkingEntity>> selectParkingByStatus();

        /**
         * 创建 ReserCreate ReserCreate Resers
         *
         * @param reserEntity reser 实体
         * @return {@link ParkingResponse }<{@link Integer }>
         * @author 小粥
         * @since 2025/03/03
         *//*预约车位*/
        ParkingResponse<Integer> createReser(ReserEntity reserEntity);

        /**
         * 取消 Reser
         *
         * @param reservationsId 预订 ID
         * @param spotId         Spot ID （点 ID）
         * @return {@link ParkingResponse }<{@link Integer }>
         * @author 小粥
         * @since 2025/03/03
         *//*取消预约车位*/
        ParkingResponse<Integer> cancelReser(int reservationsId, int spotId);

        /**
         * 按 User ID 选择 reser
         *
         * @param userId 用户 ID
         * @return {@link ParkingResponse }<{@link List }<{@link ReserEntity }>>
         * @author 小粥
         * @since 2025/03/03
         *//*使用记录查询通过用户Id*/
        ParkingResponse<List<ReserEntity>> selectReserByUserId(int userId);

        /**
         * 按 Spot ID 管理员更新停车位
         *
         * @param parkingEntity 停车实体
         * @return {@link ParkingResponse }<{@link Integer }>
         * @author 小粥
         * @since 2025/03/03
         *//*修改车位信息-管理员*/
        ParkingResponse<Integer> updateParkingBySpotIdAdmin(ParkingEntity parkingEntity);

        /**
         * 按站点 ID 删除停车位
         *
         * @param spotId Spot ID （点 ID）
         * @return {@link ParkingResponse }<{@link Integer }>
         * @author 小粥
         * @since 2025/03/03
         *//*逻辑删除车位*/
       ParkingResponse<Integer> deleteParkingBySpotId(int spotId);



}
